﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.TeamFoundation.Client;

namespace CustomControls
{
    public partial class FormSharepoint : Form
    {
        WorkItemCustomControls control;
        SharepointHelper sh;
        string url;
        string site;
        string BaseURL;

        public FormSharepoint(WorkItemCustomControls formPrincipal)
        {
            InitializeComponent();
            control = formPrincipal;

            TfsTeamProjectCollection projeto = control.CurrentWorkItem.Store.TeamProjectCollection;

            /*
             string url = "http://tfspsdemo/sites/DefaultCollection"; 
            */
            BaseURL = projeto.Uri.Scheme + "://" + projeto.Uri.Host;
            url = BaseURL + "/sites/" + projeto.Uri.Segments[projeto.Uri.Segments.Length - 1];
            site = control.CurrentWorkItem.Project.Name;

            sh = new SharepointHelper(url);

            List<Microsoft.SharePoint.Client.List> listas = sh.GetLists(site);

            //Limpar os nodes da árvore
            treeView1.Nodes.Clear();

            //Habilitando a tooltip dos Nodes
            treeView1.ShowNodeToolTips = true;

            foreach (var item in listas)
            {
                if ((item.Title != "Calendar") && (item.Title != "Dashboards") && (item.Title != "Important Dates") && (item.Title != "Master Page Gallery") && (item.Title != "Process Guidance"))
                {
                    //Criar um novo node
                    TreeNode objNodeLista = new TreeNode();

                    //Colocar o nome da pasta no Text do node
                    objNodeLista.Text = item.Title;

                    //Contrair o node
                    objNodeLista.Collapse();

                    //Colocar o caminho da pasta no ToolTip do node
                    objNodeLista.ToolTipText = item.Title;

                    // para cada lista, recupera as pastas
                    List<Microsoft.SharePoint.Client.Folder> pastas = sh.ListFolders(site, item.Title);

                    GetFolder(pastas, objNodeLista);

                    //Adicionar o node há árvore
                    treeView1.Nodes.Add(objNodeLista);
                }
            }
        }

        private void GetFolder(List<Microsoft.SharePoint.Client.Folder> pastas, TreeNode nodeLista)
        {
            foreach (var p in pastas)
            {
                if (p.Name != "Forms")
                {
                    //Criar um novo node
                    TreeNode objPasta = new TreeNode();

                    //Colocar o nome da pasta no Text do node
                    objPasta.Text = p.Name;
                    
                    //Contrair o node
                    objPasta.Collapse();

                    //Colocar o caminho da pasta no ToolTip do node
                    objPasta.ToolTipText = p.ServerRelativeUrl;

                    var sub = sh.ListSubFolders(site, p.ServerRelativeUrl);
                    GetFolder(sub, objPasta);
                    
                    //adiciona o No ao pai
                    nodeLista.Nodes.Add(objPasta);
                }
            }
        }

        private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            listDocumentos.Items.Clear();

            TreeNode node = e.Node;
            List<Microsoft.SharePoint.Client.File> files = sh.ListFilesFolder(site, node.ToolTipText);

            foreach (var item in files)
            {
                listDocumentos.Items.Add(item.Name + " - " + BaseURL + item.ServerRelativeUrl);
            }
        }
    }
}